//+------------------------------------------------------------------+
//|                                                MoneyFixedLot.mqh |
//|                             Copyright 2000-2025, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#include <Expert/ExpertMoney.h>       // 专家顾问资金管理基类

// wizard description start (向导描述，用于MQL5向导生成代码)
//+------------------------------------------------------------------+
//| 类描述信息                                                       |
//| Title=固定交易量交易                                             |
//| Type=Money                                                       |
//| Name=FixLot                                                      |
//| Class=CMoneyFixedLot                                             |
//| Page=                                                            |
//| Parameter=Percent,double,10.0,百分比                             |
//| Parameter=Lots,double,0.1,固定手数                               |
//+------------------------------------------------------------------+
// wizard description end

//+------------------------------------------------------------------+
//| CMoneyFixedLot 类：固定手数资金管理实现                            |
//| 核心能力：继承自 CExpertMoney，提供固定手数的交易资金管理策略，       |
//|           无论账户资金或市场条件如何，始终使用预设的固定手数开仓      |
//| 适用场景：需要严格控制每笔交易风险（如固定小额交易）的自动化策略，     |
//|           特别适合初学者或风险厌恶型交易者                           |
//+------------------------------------------------------------------+
class CMoneyFixedLot : public CExpertMoney
  {
protected:
   // 输入参数（保护，子类可访问）
   double            m_lots;             // 固定交易手数（每笔交易使用的手数）

public:
   //----------------------------------------------------------------
   // 构造与析构函数
   //----------------------------------------------------------------
   /**
    * @brief 构造函数：初始化固定手数资金管理对象
    * @details 初始化固定手数默认值（0.1手），继承父类 CExpertMoney 的初始化逻辑
    */
                     CMoneyFixedLot(void);

   /**
    * @brief 析构函数：清理固定手数资金管理对象
    * @details 释放资源，依赖父类析构逻辑
    */
                    ~CMoneyFixedLot(void);

   //----------------------------------------------------------------
   // 手数设置：修改固定交易手数
   //----------------------------------------------------------------
   /**
    * @brief 设置固定交易手数
    * @param lots [in] 新的固定手数值（需符合品种的手数限制）
    * @note 此方法直接修改 m_lots，建议修改后调用 ValidationSettings() 验证有效性
    */
   void              Lots(double lots);

   //----------------------------------------------------------------
   // 参数验证：检查手数设置是否符合品种规则
   //----------------------------------------------------------------
   /**
    * @brief 验证资金管理设置的有效性
    * @return bool - 验证结果：true=设置有效（手数在允许范围内且符合步长），false=无效
    * @note 先调用父类验证，再检查手数是否在品种的最小/最大手数之间，且符合手数步长
    */
   virtual bool      ValidationSettings(void);

   //----------------------------------------------------------------
   // 开仓手数计算：返回固定手数（多空一致）
   //----------------------------------------------------------------
   /**
    * @brief 计算多单开仓手数（返回固定手数）
    * @param price [in] 开仓价格（未使用，固定手数模式下忽略）
    * @param sl [in] 止损价格（未使用，固定手数模式下忽略）
    * @return double - 多单开仓手数（m_lots）
    */
   virtual double    CheckOpenLong(double price,double sl);

   /**
    * @brief 计算空单开仓手数（返回固定手数）
    * @param price [in] 开仓价格（未使用，固定手数模式下忽略）
    * @param sl [in] 止损价格（未使用，固定手数模式下忽略）
    * @return double - 空单开仓手数（m_lots）
    */
   virtual double    CheckOpenShort(double price,double sl);
  };
//+------------------------------------------------------------------+